﻿Public Class Orden_de_Compras
    Dim acceso As New acceso
    Dim proveedores As New List(Of Proveedor)
    Dim ordenCompra As New OrdenCompra()
    Dim funciones As New Funciones()
    Private Sub obtenerProveedores()
        For cont As Integer = 0 To DGV_Productos_Orden.Rows.Count - 1 Step 1
            Dim estaRepetido As Boolean = False
            If proveedores.Count > 0 Then
                For c As Integer = 0 To proveedores.Count - 1 Step 1
                    If DGV_Productos_Orden.Rows(cont).Cells("nroProveedor").Value = proveedores.Item(c)._idProveedor Then
                        estaRepetido = True
                        Exit For
                    End If
                Next
            End If
            If estaRepetido = False Then
                Dim prov As New Proveedor()
                prov._idProveedor = DGV_Productos_Orden.Rows(cont).Cells("nroProveedor").Value
                prov._razonSocial = DGV_Productos_Orden.Rows(cont).Cells("proveedor").Value
                proveedores.Add(prov)
            End If
        Next
    End Sub
    Private Sub Orden_de_Compras_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cargarGrilla()
        DTP_fecha_creacion.Value = DateTime.Now
    End Sub
    Private Sub cargarGrilla()
        Dim tabla As New Data.DataTable()
        tabla = acceso.leo_tabla("VistaProductoXProveedor")
        DGV_Productos.DataSource = tabla
        acomodarGrilla()
    End Sub

    Private Sub acomodarGrilla()
        DGV_Productos.Columns("razonSocial").HeaderText = "Proveedor"
        DGV_Productos.Columns("nombre").HeaderText = "Producto"
        DGV_Productos.Columns("codProductoProveedor").HeaderText = "Codigo del Producto del Proveedor"
        DGV_Productos.Columns("precioProveedor").HeaderText = "Costo"
        DGV_Productos.Columns("unidadMedida").HeaderText = "Unidad Medida"
        DGV_Productos.Columns("marca").HeaderText = "Marca"
        DGV_Productos.Columns("tipoProducto").HeaderText = "Tipo Producto"
        DGV_Productos.Columns("nroProveedor").Visible = False
        DGV_Productos.Columns("codProducto").Visible = False
        DGV_Productos.Columns("idMarca").Visible = False
        DGV_Productos.Columns("idTipoProducto").Visible = False
        DGV_Productos.Columns("idUnidad").Visible = False
    End Sub

    Private Sub DGV_Productos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DGV_Productos.Click
        If DGV_Productos.SelectedRows.Count <> 0 Then
            txt_cantidad.Text = ""
            lbl_unidad.Text = DGV_Productos.CurrentRow.Cells("unidadMedida").Value
            txt_cantidad.Focus()
        End If
        
    End Sub

    Private Sub btn_agregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_agregar.Click
        If txt_cantidad.Text = "" Then
            MessageBox.Show("Necesita ingresar la cantidad", "Atencion")
            txt_cantidad.Focus()
            Return
        End If
        Dim result As Boolean = False
        Dim compararProd As Integer = DGV_Productos.Rows(DGV_Productos.CurrentRow.Index).Cells("codProducto").Value
        Dim compararProv As Integer = DGV_Productos.Rows(DGV_Productos.CurrentRow.Index).Cells("nroProveedor").Value

        For i As Integer = 0 To DGV_Productos_Orden.RowCount - 1 Step 1

            If compararProd = DGV_Productos_Orden.Rows(i).Cells("codProducto").Value And compararProv = DGV_Productos_Orden.Rows(i).Cells("nroProveedor").Value Then
                result = True
                Exit For
            End If
        Next
        If result = False Then
            Dim orden As New OrdenCompra()
            orden._proveedor._idProveedor = DGV_Productos.CurrentRow.Cells("nroProveedor").Value
            orden._proveedor._razonSocial = DGV_Productos.CurrentRow.Cells("razonSocial").Value
            Dim detalle As New DetalleOrden()
            detalle._producto._codProducto = DGV_Productos.CurrentRow.Cells("codProducto").Value
            detalle._producto._nombre = DGV_Productos.CurrentRow.Cells("nombre").Value
            detalle._cantidad = txt_cantidad.Text
            detalle._precio = DGV_Productos.CurrentRow.Cells("precioProveedor").Value

            DGV_Productos_Orden.Rows.Add(orden._proveedor._idProveedor, orden._proveedor._razonSocial, detalle._producto._codProducto, detalle._producto._nombre, detalle._cantidad, detalle._precio, (detalle._cantidad * detalle._precio))
            
        Else
            If MessageBox.Show("Ya se cargó el producto, ¿Desea Modificar?", "Atencion", MessageBoxButtons.YesNo) = DialogResult.Yes Then
                Dim index As Integer = Convert.ToInt32(DGV_Productos.Rows(DGV_Productos.CurrentRow.Index).Cells("codProducto").Value)
                For j As Integer = 0 To DGV_Productos_Orden.RowCount - 1 Step 1
                    If DGV_Productos_Orden.Rows(j).Cells("codProducto").Value = index Then
                        DGV_Productos_Orden.Rows(j).Cells("cantidad").Value = txt_cantidad.Text
                        DGV_Productos_Orden.Rows(j).Cells("total").Value = Convert.ToDouble(txt_cantidad.Text) * Convert.ToDouble(DGV_Productos_Orden.Rows(j).Cells("precio").Value)
                        Exit For
                    End If
                Next
            End If
        End If
        DGV_Productos.ClearSelection()
        DGV_Productos_Orden.ClearSelection()
        txt_cantidad.Text = ""
        btn_quitar.Enabled = True
    End Sub

    Private Sub btn_quitar_Click(sender As System.Object, e As System.EventArgs) Handles btn_quitar.Click
        
        If DGV_Productos_Orden.SelectedRows.Count <> 0 Then
            DGV_Productos_Orden.Rows.Remove(DGV_Productos_Orden.CurrentRow)
            DGV_Productos_Orden.ClearSelection()
        End If
        If DGV_Productos_Orden.Rows.Count = 0 Then
            btn_quitar.Enabled = False
        End If
    End Sub
    Private Sub blanquear()
        DGV_Productos_Orden.Rows.Clear()
        txt_cantidad.Text = ""
        DGV_Productos.ClearSelection()
        btn_quitar.Enabled = False
    End Sub
    Private Sub btn_nuevo_Click(sender As System.Object, e As System.EventArgs) Handles btn_nuevo.Click
        If MessageBox.Show("¿Esta seguro que desea cargar todos los productos de nuevo?", "Atencion", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
            blanquear()
        End If
    End Sub

    Private Sub btn_salir_Click(sender As System.Object, e As System.EventArgs) Handles btn_salir.Click
        Close()
    End Sub

    Private Sub btn_guardar_Click(sender As System.Object, e As System.EventArgs) Handles btn_guardar.Click
        If DGV_Productos_Orden.Rows.Count <> 0 Then
            Try
                obtenerProveedores()
                Dim listaOrdenesCompra As New List(Of OrdenCompra)

                For i As Integer = 0 To proveedores.Count - 1 Step 1
                    Dim ListaDetalleOrdenCompra As New List(Of DetalleOrden)
                    For j As Integer = 0 To DGV_Productos_Orden.Rows.Count - 1 Step 1
                        If DGV_Productos_Orden.Rows(j).Cells("nroProveedor").Value = proveedores.Item(i)._idProveedor Then
                            Dim det As New DetalleOrden()
                            Dim prod As New Producto()

                            det._cantidad = DGV_Productos_Orden.Rows(j).Cells("cantidad").Value
                            det._precio = DGV_Productos_Orden.Rows(j).Cells("precio").Value
                            det._subtotal = DGV_Productos_Orden.Rows(j).Cells("total").Value

                            prod._codProducto = DGV_Productos_Orden.Rows(j).Cells("codProducto").Value
                            det._producto = prod
                            ListaDetalleOrdenCompra.Add(det)
                        End If

                    Next
                    Dim prov As New Proveedor()
                    Dim ordenCompra As New OrdenCompra()
                    Dim estado As New Estado()
                    prov._idProveedor = proveedores.Item(i)._idProveedor
                    ordenCompra._fechaCreacion = DTP_fecha_creacion.Value.Date
                    ordenCompra._fecheNecesidad = DTP_fecha_necesidad.Value.Date
                    ordenCompra._proveedor = prov
                    ordenCompra._detalle = ListaDetalleOrdenCompra
                    estado._idEstado = 1
                    ordenCompra._estado = estado
                    listaOrdenesCompra.Add(ordenCompra)
                Next
                acceso.generarOrdenesDeCompra(listaOrdenesCompra)
                Dim mensaje As String = ""
                For cant As Integer = 0 To proveedores.Count - 1 Step 1
                    mensaje &= proveedores.Item(cant)._idProveedor & ": " & proveedores.Item(cant)._razonSocial & Environment.NewLine
                Next
                MessageBox.Show("Se generaron Ordenes de compras de los siguientes proveedores: " & Environment.NewLine & mensaje, "ATENCION")
                blanquear()
            Catch ex As Exception
                MessageBox.Show(ex.ToString())
            End Try
        End If


    End Sub

    Private Sub DTP_fecha_necesidad_ValueChanged(sender As System.Object, e As System.EventArgs) Handles DTP_fecha_necesidad.ValueChanged
        If DTP_fecha_necesidad.Value.Date < DateTime.Now.Date Then
            MessageBox.Show("La fecha de Necesidad no puede ser menor a la fecha actual", "ATENCION")
            DTP_fecha_necesidad.Value = DateTime.Now.Date
        End If
    End Sub

    Private Sub txt_stock_riesgo_KeyPress(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.KeyPressEventArgs) Handles txt_cantidad.KeyPress
        eventArgs.Handled = funciones.validarDouble(eventArgs.KeyChar, txt_cantidad.Text & CChar(eventArgs.KeyChar))
    End Sub

    Private Sub DGV_Productos_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV_Productos.CellContentClick

    End Sub
End Class